aspect-oriented programming oriented aop thin-client java ajax software architecture hyperj radius3 software splc 2007 advertising software reuse intentional programming application design patterns soa aspect service oriented architecture